// dbus_parser.h
#ifndef __DBUS_PARSER_H
#define __DBUS_PARSER_H

#include <stdint.h>
#include <stdbool.h>

#pragma pack(push, 1)
typedef struct {
    uint8_t header[2];      //帧头 0X03 0x3F
    int16_t ch0;           // 右摇杆左右(X)
    int16_t ch1;           // 右摇杆上下(Y)
    int16_t ch2;           // 左摇杆上下(Y)
    int16_t ch3;           // 左摇杆左右(X)
    int16_t ch4;           // 拨轮1
    int16_t ch5;           // 拨轮2
    int16_t ch6;           // 保留
    uint8_t switches;      // 开关状态
    uint8_t mouse_buttons; // 鼠标按键
} DBUS_Data;
#pragma pack(pop)

// 通道值范围定义
#define DBUS_CH_MIN     364
#define DBUS_CH_MID     1024
#define DBUS_CH_MAX     1684

// 开关状态定义
#define SWITCH_UP       0
#define SWITCH_MID      1  
#define SWITCH_DOWN     2

// 解析状态 未定义拨轮
typedef struct {
    DBUS_Data raw_data;
    bool connected;
    uint32_t last_update;
    
    // 解析后的通道值 (-660 ~ 660)
    int16_t right_x;
    int16_t right_y; 
    int16_t left_y;
    int16_t left_x;
    
    // 开关状态
    uint8_t left_switch;
    uint8_t right_switch;
} DBUS_Parser;

// 函数声明
void DBUS_Init(DBUS_Parser *parser);
bool DBUS_Update(DBUS_Parser *parser, uint8_t *data, uint32_t len);
void DBUS_ParseChannels(DBUS_Parser *parser);
void DBUS_SimulateData(uint8_t *buffer, int16_t lx, int16_t ly, int16_t rx, int16_t ry, uint8_t l_sw, uint8_t r_sw);

#endif